package com.exce;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @Author WaveHi
 * @Date 21/8/2021 下午 8:59
 * @Version 1.0
 * @Contact HJBWaveHi@163.com
 * @Description
 */
public class StreamCopyDemo2 {

    public static void main(String[] args) {

        //获取需要复制的目录
        File srcDir = new File("day11/testfile/txt");

        //获取目标目录
        File destDir = new File("day11/testfile/txt2");

        //开始复制
        StreamCopyDemo2 scy = new StreamCopyDemo2();
        scy.copyFileAtDir(srcDir,destDir);

    }

    public void copyFileAtDir(File srcDir,File destDir) {

        //异常情况处理
        if(srcDir == null || destDir == null || !srcDir.isDirectory() || !destDir.isDirectory()) {

            throw new RuntimeException("The argument is illegal!");

        }

        //获取目录的文件
        File[] files = srcDir.listFiles();

        //开始复制
        for(File file : files) {

            if(file.isFile()) {

                //复制
                String toFile = destDir.getPath() + file.separator + file.getName();
                copyFile(file,toFile);

            }

        }

    }

    public void copyFile(File srcFile,String dest) {

        FileInputStream fis1 = null;
        FileOutputStream fos1 = null;
        try{

            //获取流
            fis1 = new FileInputStream(srcFile);
            fos1 = new FileOutputStream(new File(dest));

            //接受读取的数据
            byte[] b = new byte[1024];

            //接收读取数据的长度
            int len = 0;

            //存取数据
            while((len = fis1.read(b)) != -1) {

                fos1.write(b,0,len);

            }

        }catch(IOException e) {

            e.printStackTrace();

        }finally {

            //资源的关闭
            if(fis1 != null) {

                try{

                    fis1.close();

                }catch(IOException e) {

                    e.printStackTrace();

                }

            }
            if(fos1 != null) {

                try{

                    fos1.close();

                }catch(IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}
